package com.yqh.Collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;

/**
 * Collection 的遍历方式3：Lambda表达式
 * @author 阳秋豪
 * @createTime 2024/3/5
 */
public class Test5 {
    public static void main(String[] args) {
        Collection<String> collection = new ArrayList<>();
        collection.add("张三");
        collection.add("李四");
        collection.add("王五");
        System.out.println("collection -- " + collection); // collection -- [张三, 李四, 王五]

        /*------------------ 结合 Lambda 表达式遍历集合 ------------------*/
        // default void forEach(Consumer<? super T> action)
        // 来源 -- Collection 的父接口 iterable
        // 描述 -- 对 iterable 中的每个元素执行操作（自定义），直到处理完所有元素或者抛出异常
        // 本质 -- 增强for循环
        collection.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.print(s);
            }
        }); // 张三李四王五

        System.out.println("\n简化1");
        // 简化1 -- 只有一个方法
        collection.forEach((String s) -> {
            System.out.print(s);
        }); // 张三李四王五

        System.out.println("\n简化2");
        // 简化2 -- 只有一个参数
        collection.forEach(s -> {
            System.out.print(s);
        }); // 张三李四王五

        System.out.println("\n简化3");
        // 简化3 -- 只有一条执行语句
        collection.forEach(s -> System.out.print(s)); // 张三李四王五

        System.out.println("\n简化4");
        // 简化4 -- 参数与执行语句的方法参数名相同时（不明白看上次简化的两个s）
        collection.forEach(System.out::print); // 张三李四王五

    }
}
